/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamanpos;

import org.sadhar.sipp.perekamanpossubpos.PerekamanPosSubPos;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.kelompokpengurusbiaya.KelompokPengurusBiaya;
import org.sadhar.sipp.kelompokpengurusbiaya.KelompokPengurusBiayaDAO;
import org.sadhar.sipp.kelompokpengurusbiaya.KelompokPengurusBiayaDAOImpl;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Space;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

/**
 *
 * @author hendro
 */
public class PerekamanPosWnd extends ClassApplicationModule {

    private Textbox txtboxCariJenisPos;
    private Button btnCariJenisPos;
    private Textbox txtboxNamaTabel;
    private Textbox txtboxNamaPos;
    private Textbox txtboxKodePos;
    private Textbox txtboxKodeGL1;
    private Textbox txtboxKodeGL2;
    private Textbox txtboxKodeGL3;
    private Textbox txtboxKodeGL4;
    private Radio rdTidak;
    private Radio rdYa;
    private Button btnSimpan;
    private Button btnBatal;
    //private Grid gridDaftarPos;
    private Combobox cmbboxKelompokPengurusBiaya;
    private Textbox txtboxKodeKelompokPengurusBiaya;
    private PerekamanPosDAO posDAO;
    private KelompokPengurusBiayaDAO kelDAO;
    private String oldJenisPos = "";
    private Listbox lstboxDaftarPos;

    public PerekamanPosWnd() {
        this.posDAO = new PerekamanPosDAOImpl();
        this.kelDAO = new KelompokPengurusBiayaDAOImpl();
    }

    public void onCreate() throws Exception {
        txtboxCariJenisPos = (Textbox) getFellow("txtboxCariJenisPos");
        btnCariJenisPos = (Button) getFellow("btnCariJenisPos");
        txtboxNamaTabel = (Textbox) getFellow("txtboxNamaTabel");
        txtboxNamaPos = (Textbox) getFellow("txtboxNamaPos");
        txtboxKodePos = (Textbox) getFellow("txtboxKodePos");
        txtboxKodeGL1 = (Textbox) getFellow("txtboxKodeGL1");
        txtboxKodeGL2 = (Textbox) getFellow("txtboxKodeGL2");
        txtboxKodeGL3 = (Textbox) getFellow("txtboxKodeGL3");
        txtboxKodeGL4 = (Textbox) getFellow("txtboxKodeGL4");
        rdTidak = (Radio) getFellow("rdTidak");
        rdYa = (Radio) getFellow("rdYa");
        btnSimpan = (Button) getFellow("btnSimpan");
        btnBatal = (Button) getFellow("btnBatal");
        //gridDaftarPos = (Grid) getFellow("gridDaftarPos");
        cmbboxKelompokPengurusBiaya = (Combobox) getFellow("cmbboxKelompokPengurusBiaya");
        txtboxKodeKelompokPengurusBiaya = (Textbox) getFellow("txtboxKodeKelompokPengurusBiaya");
        lstboxDaftarPos = (Listbox) getFellow("lstboxDaftarPos");
        clear();
        load();
        loadKelompokPengurusBiaya();
    }

    public void clear() throws Exception {
        txtboxCariJenisPos.setValue("");
        txtboxNamaTabel.setValue("");
        txtboxNamaPos.setValue("");
        txtboxKodePos.setValue("");
        txtboxKodeGL1.setValue("");
        txtboxKodeGL2.setValue("");
        txtboxKodeGL3.setValue("");
        txtboxKodeGL4.setValue("");
        rdYa.setSelected(false);
        rdTidak.setSelected(false);
        cmbboxKelompokPengurusBiaya.setSelectedItem(null);
        txtboxKodeKelompokPengurusBiaya.setValue("");
        txtboxCariJenisPos.setDisabled(false);
        txtboxNamaTabel.setDisabled(false);
        txtboxNamaPos.setDisabled(false);
        txtboxKodePos.setDisabled(false);
        rdYa.setDisabled(false);
        rdTidak.setDisabled(false);
        txtboxKodeGL1.setDisabled(false);
        txtboxKodeGL2.setDisabled(false);
        txtboxKodeGL3.setDisabled(false);
        txtboxKodeGL4.setDisabled(false);
        cmbboxKelompokPengurusBiaya.setDisabled(false);
    }

    public void load() throws Exception {
        int no = 1;
        lstboxDaftarPos.getItems().clear();
        for (final PerekamanPosSubPos subPos : posDAO.list()) {
            Listitem item = new Listitem();
            item.setValue(subPos);
            if (oldJenisPos.equalsIgnoreCase(subPos.getJenisPos())) {
                item.appendChild(new Listcell(""));
            } else {
                item.appendChild(new Listcell(subPos.getJenisPos()));
                oldJenisPos = subPos.getJenisPos();
            }
            item.appendChild(new Listcell(subPos.getNama()));
            item.appendChild(new Listcell("")); // untuk kode GL
            Listcell cellAksi = new Listcell();

            Toolbarbutton btnUbah = new Toolbarbutton();
            btnUbah.setId("btnUbah" + (no++));
            btnUbah.setLabel("[ubah]");
            //btnUbah.setStyle("text-decoration:underline");
            btnUbah.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    if (subPos.getIsMutlak().equalsIgnoreCase("Y")) {
                        Messagebox.show("Maaf Pos Biaya ini tidak dapat diubah", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                    } else {
                        txtboxCariJenisPos.setDisabled(false);
                        txtboxNamaTabel.setDisabled(false);
                        txtboxNamaPos.setDisabled(false);
                        txtboxKodePos.setDisabled(false);
                        cmbboxKelompokPengurusBiaya.setDisabled(false);

                        txtboxCariJenisPos.setValue(subPos.getJenisPos());
                        txtboxNamaTabel.setValue(subPos.getTabel());
                        txtboxNamaPos.setValue(subPos.getNama());
                        txtboxKodePos.setValue(subPos.getKode() + "");
                        if (subPos.getJenisPos().equalsIgnoreCase("Pendapatan")) {
                            rdYa.setDisabled(false);
                            rdTidak.setDisabled(false);
                            if (subPos.getIsLainLain().equalsIgnoreCase("Y")) {
                                rdYa.setSelected(true);
                                rdTidak.setSelected(false);
                            } else if(subPos.getIsLainLain().equalsIgnoreCase("N")) {
                                rdYa.setSelected(false);
                                rdTidak.setSelected(true);
                            } else{
                                rdYa.setSelected(false);
                                rdTidak.setSelected(false);
                            }
                        } else {
                            rdYa.setDisabled(true);
                            rdTidak.setDisabled(true);
                        }

                        if (subPos.getJenisPos().equalsIgnoreCase("Biaya")) {
                            txtboxKodeGL1.setDisabled(true);
                            txtboxKodeGL2.setDisabled(true);
                            txtboxKodeGL3.setDisabled(true);
                            txtboxKodeGL4.setDisabled(true);
                            cmbboxKelompokPengurusBiaya.setDisabled(false);
                            cmbboxKelompokPengurusBiaya.setValue(kelDAO.select(subPos.getKodeKelompoPengurusBiaya()).getNamaKelompokPengurusBiaya());
                            txtboxKodeKelompokPengurusBiaya.setValue(subPos.getKodeKelompoPengurusBiaya() + "");
                        } else {
                            txtboxKodeGL1.setDisabled(false);
                            txtboxKodeGL2.setDisabled(false);
                            txtboxKodeGL3.setDisabled(false);
                            txtboxKodeGL4.setDisabled(false);
                            cmbboxKelompokPengurusBiaya.setValue("");
                            cmbboxKelompokPengurusBiaya.setDisabled(true);
                            cmbboxKelompokPengurusBiaya.setSelectedItem(null);
                        }

                    }
                }
            });

            final Toolbarbutton btnHapus = new Toolbarbutton();
            btnHapus.setId("btnHapus" + (no++));
            btnHapus.setLabel("[hapus]");
            //btnHapus.setStyle("text-decoration:underline");
            btnHapus.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    if (subPos.getIsMutlak().equalsIgnoreCase("Y")) {
                        Messagebox.show("Maaf Pos Biaya ini tidak dapat dihapus", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                    } else {
                        if (Messagebox.show("Apakah data Pos: " + subPos.getNama() + " akan dihapus?", "Pesan Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                            try {
                                posDAO.delete(subPos, subPos.getTabel());
                            } catch (Exception ex) {
                                Messagebox.show("Gagal menghapus data: " + ex.getMessage());
                            }
                            btnHapus.addForward(null, btnBatal, "onClick");
                        }
                    }
                }
            });
            cellAksi.appendChild(btnUbah);
            cellAksi.appendChild(new Space());
            cellAksi.appendChild(btnHapus);
            item.appendChild(cellAksi);
            lstboxDaftarPos.appendChild(item);
        }
    }

    public void lstboxDaftarPosOnSelect() throws Exception {
        PerekamanPosSubPos subPos = (PerekamanPosSubPos) lstboxDaftarPos.getSelectedItem().getValue();
        txtboxCariJenisPos.setDisabled(true);
        txtboxNamaTabel.setDisabled(true);
        txtboxNamaPos.setDisabled(true);
        txtboxKodePos.setDisabled(true);
        rdYa.setDisabled(true);
        rdTidak.setDisabled(true);
        txtboxKodeGL1.setDisabled(true);
        txtboxKodeGL2.setDisabled(true);
        txtboxKodeGL3.setDisabled(true);
        txtboxKodeGL4.setDisabled(true);
        cmbboxKelompokPengurusBiaya.setDisabled(true);
        txtboxCariJenisPos.setValue(subPos.getJenisPos());
        txtboxNamaTabel.setValue(subPos.getTabel());
        txtboxNamaPos.setValue(subPos.getNama());
        txtboxKodePos.setValue(subPos.getKode() + "");

        if (subPos.getJenisPos().equalsIgnoreCase("Pendapatan")) {
            if (subPos.getIsLainLain().equalsIgnoreCase("Y")) {
                rdYa.setSelected(true);
                rdTidak.setSelected(false);
            } else if(subPos.getIsLainLain().equalsIgnoreCase("N")) {
                rdYa.setSelected(false);
                rdTidak.setSelected(true);
            } else{
                rdYa.setSelected(false);
                rdTidak.setSelected(false);
            }
        }
        if (subPos.getJenisPos().equalsIgnoreCase("Biaya")) {
            cmbboxKelompokPengurusBiaya.setValue(kelDAO.select(subPos.getKodeKelompoPengurusBiaya()).getNamaKelompokPengurusBiaya());
            txtboxKodeKelompokPengurusBiaya.setValue(subPos.getKodeKelompoPengurusBiaya() + "");
        } else {
            cmbboxKelompokPengurusBiaya.setValue("");
            cmbboxKelompokPengurusBiaya.setSelectedItem(null);
        }
    }

    public void loadKelompokPengurusBiaya() throws Exception {
        cmbboxKelompokPengurusBiaya.getItems().clear();
        for (KelompokPengurusBiaya kel : kelDAO.listAll()) {
            Comboitem item = new Comboitem();
            item.setValue(kel);
            item.setLabel(kel.getNamaKelompokPengurusBiaya());
            cmbboxKelompokPengurusBiaya.appendChild(item);
        }
    }

    public void cmbboxKelompokPengurusBiayaOnSelect() throws Exception {
        KelompokPengurusBiaya kel = (KelompokPengurusBiaya) cmbboxKelompokPengurusBiaya.getSelectedItem().getValue();
        txtboxKodeKelompokPengurusBiaya.setValue(kel.getKodeKelompokPengurusBiaya() + "");
    }

    public void btnBatalOnClick() throws Exception {
        clear();
        load();
    }

    public void btnSimpanOnClick() throws Exception {
        if (txtboxNamaTabel.getValue().isEmpty()) {
            Messagebox.show("Silahkan pilih Jenis Pos", "Persan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            btnCariJenisPos.setFocus(true);
            return;
        }
        if (txtboxNamaPos.getValue().isEmpty()) {
            Messagebox.show("Silakan masukan Nama Pos", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            txtboxNamaPos.setFocus(true);
            return;
        }
        if (txtboxNamaTabel.getValue().equalsIgnoreCase("posPendapatan")) {
            if (!rdYa.isChecked() && !rdTidak.isChecked()) {
                Messagebox.show("Silahkan Pilih Pendapatan Lain-lain", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                return;
            }
        }


        PerekamanPosSubPos subPos = new PerekamanPosSubPos();
        if (txtboxNamaTabel.getValue().equalsIgnoreCase("posPendapatan")) {
            subPos.setNama(txtboxNamaPos.getValue());
            if (rdYa.isSelected()) {
                subPos.setIsLainLain("Y");
            } else {
                subPos.setIsLainLain("N");
            }

        } else {
            subPos.setNama(txtboxNamaPos.getValue());
        }
        if (txtboxNamaTabel.getValue().equalsIgnoreCase("posBiaya")) {
            if (txtboxKodeKelompokPengurusBiaya.getValue().isEmpty()) {
                Messagebox.show("Silahkan Pilih Kelompok Pengurus Biaya", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                return;
            } else {
                subPos.setKodeKelompoPengurusBiaya(Integer.valueOf(txtboxKodeKelompokPengurusBiaya.getValue()));
            }
        }
        if (txtboxKodePos.getValue().isEmpty()) {
            //new
            try {
                if (posDAO.select(subPos.getNama(), txtboxNamaTabel.getValue()).size() <= 0) {
                    posDAO.insert(subPos, txtboxNamaTabel.getValue());
                    clear();
                    load();
                } else {
                    Messagebox.show("Data Pos sudah ada, silahkan masukan data yang lain", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                    return;
                }
            } catch (Exception ex) {
                Messagebox.show("Data gagal disimpan: " + ex.getMessage(), "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);

            }
        } else {
            //update
            subPos.setKode(Integer.valueOf(txtboxKodePos.getValue()));
            try {
                if (posDAO.select(subPos.getKode(), subPos.getNama(), txtboxNamaTabel.getValue()).size() <= 0) {
                    posDAO.update(subPos, txtboxNamaTabel.getValue());
                    clear();
                    load();
                } else {
                    Messagebox.show("Data Pos sudah ada, silahkan masukan data yang lain", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                    return;
                }
            } catch (Exception ex) {
                Messagebox.show("Data gagal disimpan: " + ex.getMessage(), "Pesan Informasi", Messagebox.OK, Messagebox.ERROR);
            }
        }
    }

    public void btnCariJenisPosOnClick() throws Exception {
        final Window win = (Window) Executions.createComponents("/sippzul/perekamanpos/JenisPosPopup.zul", this, null);
        Textbox txtboxKeySearch = (Textbox) win.getFellow("txtboxKeySearch");
        txtboxKeySearch.setValue(txtboxCariJenisPos.getValue());
        win.doModal();
    }
}

